package com.tange.ai.iot.client.gnssa.utils;

import com.google.gson.Gson;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

public class ThumbnailResponseParser {

    // 缩略图信息结构体
    public static class ThumbnailInfo {
        public int urlLength;  // 缩略图URL的长度
        public int timestamp;  // 缩略图时间戳
        public String url;     // 缩略图URL字符串

        public ThumbnailInfo(int urlLength, int timestamp, String url) {
            this.urlLength = urlLength;
            this.timestamp = timestamp;
            this.url = url;
        }
    }

    // 响应结构体
    public static class Response {
        public int thumbnailCount;         // 缩略图数量
        public List<ThumbnailInfo> thumbnails; // 缩略图信息列表

        public Response(int thumbnailCount, List<ThumbnailInfo> thumbnails) {
            this.thumbnailCount = thumbnailCount;
            this.thumbnails = thumbnails;
        }
    }

    /**
     * 从输入流解析缩略图响应数据
     *
     * @param inputStream 固件端的字节输入流
     * @return 解析后的Response对象
     * @throws IOException 如果读取数据出错
     */
    public static Response parseThumbnailResponse(InputStream inputStream) throws IOException {
        DataInputStream dis = new DataInputStream(inputStream);

        // 1. 读取缩略图数量 (4字节整数)
        int thumbnailCount = dis.readInt();

        // 2. 验证数量不超过50 (根据结构体定义)
        if (thumbnailCount > 50) {
            thumbnailCount = 50; // 防止恶意数据
        }

        // 3. 准备存储缩略图信息的列表
        List<ThumbnailInfo> thumbnails = new ArrayList<>(thumbnailCount);

        // 4. 循环读取每个缩略图信息
        for (int i = 0; i < thumbnailCount; i++) {
            // 4.1 读取URL长度 (4字节整数)
            int urlLength = dis.readInt();

            // 4.2 读取时间戳 (4字节整数)
            int timestamp = dis.readInt();

            // 4.3 读取URL字节数组 (固定256字节)
            byte[] urlBytes = new byte[256];
            dis.readFully(urlBytes);  // 读取完整256字节

            // 4.4 转换为字符串 (只取有效长度)
            String url = new String(
                    urlBytes,
                    0,
                    Math.min(urlLength, 256), // 确保不越界
                    StandardCharsets.UTF_8
            );

            // 4.5 添加到列表
            thumbnails.add(new ThumbnailInfo(urlLength, timestamp, url));
        }

        return new Response(thumbnailCount, thumbnails);
    }

    /**
     * 将Response对象转换为JSON字符串
     *
     * @param response 解析后的响应对象
     * @return JSON字符串
     */
    public static String toJson(Response response) {
        return new Gson().toJson(response);
    }
}
